Conventionally, there has been known a technique that executes RDMA (Remote Direct Memory Access) communication between a local node and a remote node.
FIG. 1 illustrates an example of a case where data is transmitted from a main memory of the local node to a main memory of the remote node (i.e., an example of Put communication). In the example of FIG. 1, a transfer unit of DMA (Direct Memory Access) is 128 bytes. As to a transfer starting address specified by a processor, the local node is 40 and the remote node is 88. It is assumed that data length is 1348 bytes, and MTU (Maximum Transmission Unit; maximum transmission size per one packet) is 512 bytes. In this example, data is divided into three packets, the three packets are transmitted to the main memory of the remote node. However, in both main memories of the local node and the remote node, data areas of packets 1 to 3 are not aligned according to a DMA transfer unit. Therefore, the data is read and written in every 128 bytes from the head of the data, so that data transfer efficiency about reading and writing the data deteriorates.
For example, when data on the packet 1 is read out from the main memory of the local node, a processor of the local node needs to read out data of 128 bytes from address ranges 0 to 127 and 128 to 255, respectively, in order to read out data of an address range 40 to 167. Further, to read out data of an address range 168 to 295, the processor of the local node needs to read out data of 128 bytes from address ranges 128 to 255 and 256 to 383, respectively. Thus, the processor of the local node reads out data twice from the same addresses (i.e., address range 128 to 255), so that the efficiency of reading the data deteriorates. With respect to addresses subsequent to an address 256, the processor of the local node similarly reads out data twice from the same addresses.
Similarly, when the data on the packet 1 is written in the main memory of the remote node, the efficiency of writing the data deteriorates. For example, when the data on the packet 1 is written in the main memory of the remote node, a processor of the remote node needs to write data of 128 bytes in address ranges 0 to 127 and 128 to 255, respectively, in order to write data in an address range 88 to 215. To write data in an address range 216 to 343, the processor of the remote node needs to write data of 128 bytes in address ranges 128 to 255 and 256 to 383, respectively. Thus, the processor of the remote node writes data twice in the same addresses (i.e., address range 128 to 255), so that the efficiency of writing the data deteriorates. With respect to addresses subsequent to an address 256, the processor of the remote node similarly writes data twice in the same addresses. Moreover, when data is written for the second time, previously written data needs to be not overwritten.
Conventionally, there has been known a division method and a system in which a head of an I/O request (Input Output request) such as received read/write is divided according to a boundary of a cache line, and a subsequent I/O request is aligned on another cache line.
FIG. 2 illustrates a result of applying a division method, in which the above-mentioned head of the I/O request is divided according to the boundary of the cache line, and the subsequent I/O request is aligned on another cache line, to the example of the Put communication in FIG. 1.
When the local node reads out the data on the packet 1, a head section of the packet 1 is divided at a boundary between addresses 127 and 128, and a remaining section of the packet 1 is divided so as to align on 128 bytes boundaries. Thereby, except for the head and an end of the packet 1, data on the packet 1 is aligned on the 128 bytes boundaries. Therefore, when data of one packet is read out, the same addresses are not read out twice.
When the remote node writes the data on the packet 1, the head section of the packet 1 is divided at the boundary between addresses 127 and 128, and the remaining section of the packet 1 is divided so as to align on 128 bytes boundaries. Thereby, except for the head and the end of the packet 1, data on the packet 1 is aligned on the 128 bytes boundaries. Therefore, when data of one packet is written, the data is not written in the same addresses twice.
However, in the above-mentioned division method in which the above-mentioned head of the I/O request is divided according to the boundary of the cache line, and the subsequent I/O request is aligned on another cache line, the data transfer efficiency about reading and/or writing data from/in addresses including a divisional point of the packets deteriorates. For example, when the local node reads out data on the end of the packet 1, the processor of the local node reads out data of 128 bytes from an address range 512 to 639. When the local node reads out data on the head of the packet 2, the processor of the local node reads out data of 128 bytes from the address range 512 to 639. Thus, the processor of the local node needs to read out the data twice from the address range (address range 512 to 639) including the divisional point of the packets. Similarly, when the remote node writes the data on the end of the packet 1 and the data on the head of the packet 2, the processor of the remote node needs to write the data twice in the address range 512 to 639.